/**
 * \file: test_commande.c
 * \author:Achaoui et Letellier
 * Iplementation des procedures de test de test_commande.h
 * Ces tests sont effectues sur les fonctions de commande.h
 */

#include <stdio.h>
#include <stdlib.h>
#include "test_commande.h"
#include "typesprimitifs.h"
#include "produit.h"



/**
 * Nombres de test reussis.
 */
static ENTIER_POSITIF ok_test_commande=0;


/**
 * Nombres de test echoues
 */
static ENTIER_POSITIF ko_test_commande=0;


void set_up_test_commande() {

	printf("-------- DEBUT TEST : commande --------\n");
}

POINTEUR_COMMANDE tester_creer_commande() {
	POINTEUR_COMMANDE pc = creer_commande();
	if (pc) {
			ok_test_commande++;
			printf("PASSED : tester_creer_commande.\n");
		}
	else 	{
			ko_test_commande++;
			printf("FAILED : tester_creer_commande.\n");
		}
	return pc;
}

void tester_ajouter_produit_commande(POINTEUR_COMMANDE pc, POINTEUR_PRODUIT tabProd[])
{
	ENTIER_POSITIF i=0;
	for (i=0;i<5;i++){
		ajouter_produit_commande(tabProd[i],(i+1)*5,pc);
		if (pc->lignes[i]) {
			ok_test_commande++;
			printf("PASSED : tester_ajouter_produit_commande.\n");
		}
	else 	{
			ko_test_commande++;
			printf("FAILED : tester_ajouter_produit_commande.\n");
		}
    }
}

void tester_modifier_ligne_commande(POINTEUR_COMMANDE pc)
{
	ENTIER_POSITIF i=0;
	for (i=1;i<6;i++){
		modifier_ligne_commande(pc,i,i*3);
		if (pc->lignes[i-1]->quantite==(i*3)) {
			ok_test_commande++;
			printf("PASSED : tester_modifier_ligne_commande.\n");
		}
	else 	{
			ko_test_commande++;
			printf("FAILED : tester_modifier_ligne_commande.\n");
		}
    }
}

void tester_supprimer_ligne_commande(POINTEUR_COMMANDE pc)
{
	ENTIER_POSITIF i=0;
	for (i=5;i>0;i--){
		supprimer_ligne_commande(pc,i);
		if (!(pc->lignes[i-1])){
			ok_test_commande++;
			printf("PASSED : tester_supprimer_ligne_commande.\n");
            }
	else 	{
			ko_test_commande++;
			printf("FAILED : tester_supprimer_ligne_commande.\n");
		    }
      }
}


void tear_down_tests_commande() {
    printf("-------- STATS TESTS COMMANDE --------\n");
    printf("Tests reussis: %d\n", ok_test_commande);
    printf("Tests echoues : %d\n", ko_test_commande);
    printf("-----------------------------------\n");
    printf("FIN TEST: commande\n");
}
	




void tester_commande()
{
	POINTEUR_PRODUIT tabProd[5];


	POINTEUR_PRODUIT p1=malloc(sizeof(PRODUIT));
	p1->prix_u=15;
	p1->quantite_disponible=100;
	tabProd[0]=p1;

	POINTEUR_PRODUIT p2=malloc(sizeof(PRODUIT));
	p2->prix_u=7.5;
	p2->quantite_disponible=100;
	tabProd[1]=p2;

	POINTEUR_PRODUIT p3=malloc(sizeof(PRODUIT));
	p3->prix_u=63;
	p3->quantite_disponible=100;
	tabProd[2]=p3;

	POINTEUR_PRODUIT p4=malloc(sizeof(PRODUIT));
	p4->prix_u=23;
	p4->quantite_disponible=100;
	tabProd[3]=p4;

	POINTEUR_PRODUIT p5=malloc(sizeof(PRODUIT));
	p5->prix_u=17.5;
	p5->quantite_disponible=100;
	tabProd[4]=p5;

	set_up_test_commande();
	POINTEUR_COMMANDE pc=tester_creer_commande();
	tester_ajouter_produit_commande(pc,tabProd);
	tester_modifier_ligne_commande(pc);
	tester_supprimer_ligne_commande(pc);
	tear_down_tests_commande();
	free(pc);
	free(p1);
	free(p2);
	free(p3);
	free(p4);
	free(p5);
}
